package br.com.simtecnologia.access.controll.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Define uma anotação com propriedade para usar o Controle de Acesso, para
 * uma lógica.
 * @author Tomaz Lavieri
 * @see ControlledResource
 * @see LoginLogic
 * @see DeniedLogic
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ControlledLogic {
	
	/**
	 * (Opcional)
	 * O nome que identifica a lógica para o controle de funcionalidade, várias
	 * lógicas podem conter o mesmo nome, e neste caso, o acesso aberto ou
	 * fechado a uma lógica, sera refletida a todas as outras com o mesmo nome
	 * dentro do mesmo recurso.<br/>
	 * <br/>Caso o nome não seja passado, o nome do próprio método sera usado.
	 */
	String value() default "";
	
	/**
	 * (Opcional)
	 * Define se o acesso padrão da lógica é fechado ou aberto.<br/>
	 * <br/>Por definição essa propriedade fecha a lógica, só se fazendo necessário usar a
	 * propriedade quando há necessidade de por padrão deichar a lógica aberta.<br/>
	 * <br/>O acesso de todas as lógicas de um recurso pode ser definida usando a propriedade
	 * locked da anotação @{@link ControlledResource}.
	 * @see ControlledResource
	 */
	boolean locked() default true;
}
